﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Wpfконфигуратор.Визуализаторы;
using конфигуратор;

namespace Wpfконфигуратор
{
    /// <summary>
    /// Логика взаимодействия для ВыборОбъекта.xaml
    /// </summary>
    public partial class ВидПеременной 
    {
        public ВидПеременной ()
        {
            InitializeComponent(); // загружает BAml-код из сборки, если его нет ничего не делает 
            // 
            // Baml упрощает набор 

            // или сюда или в загрузгу
            // здесь можно сконструировать визуальный  объект
            // в том числе 

            //object объект = DataContext;
            //ContentControl визуализатор = ВыбратьВизуализатор( объект );
            //// визуализатор это не DataTemplate , а полноценый объект с обработчиками событий
            //Content = визуализатор;  // выбирает DataTemplete если это не Visual   из Присоединенных словарей Ресурсов

        }

      

        private void MenuItem_Click_ОткрытьСПомощью ( object sender, RoutedEventArgs e )
        {
              var поле = DataContext as ПолеВизуализатор;
            if ( поле == null ) return;
            поле.Визуализатор=new ВизуализаторОснова(){Переменная = поле};
            поле.ОбновитьСвойство( "ВизуализаторЗначения" );
        }

        private void MenuItem_ClickУдалить ( object sender, RoutedEventArgs e )
        {
            var поле = DataContext as ПолеВизуализатор;     
            if (поле == null)  return;
            if (переменнаяВизуализатор.Редактируемый) поле.Удалить();
        }

        private void MenuItem_Click_Создать ( object sender, RoutedEventArgs e )
        {
              var поле = DataContext as ПолеВизуализатор;
            if ( поле == null ) return;
           if (!переменнаяВизуализатор.Редактируемый)  return;

            var меню = e.OriginalSource as MenuItem;
            if (меню != null)
            {
                var выбранныйКонструктор = меню.Header as КонструкторВизуализатор;    
 
                if (выбранныйКонструктор!=null)
                {
                    if ( выбранныйКонструктор.Параметры.Count == 0 )
                    {
                        переменнаяВизуализатор.Конструктор = выбранныйКонструктор;
                       переменнаяВизуализатор.СоздатьОбъект();
                        return;
                    }
                    else
                    {
                        if (переменнаяВизуализатор.ВыбранныйТип==null)
                        {
                            переменнаяВизуализатор.ВыбранныйТип = выбранныйКонструктор.ДинОбъект;
                        }
                        
                        переменнаяВизуализатор._выбранныйКонструктор = выбранныйКонструктор;

                        var окно = new СоздатьОбъект();
                        Point locationFromScreen = PointToScreen( new Point( 0, 0 ) );
                        окно.Top = locationFromScreen.Y - 80;
                        окно.Left = locationFromScreen.X + 20;
                       
                        окно.DataContext = переменнаяВизуализатор;

                        var рез = окно.ShowDialog();
                        //if (рез==true)
                        //{
                        //    визуализаторДиалогаСоздания.СоздатьОбъект();
                        //}
                    }
                     
                }
             

            }

        }

        private ПеременнаяВизуализатор переменнаяВизуализатор;

        private void ContentControl_ContextMenuOpening ( object sender, ContextMenuEventArgs e )
        {
            var поле = DataContext as ПолеВизуализатор;
            if ( поле != null ) переменнаяВизуализатор = поле.ДиалогСоздания;
            else return;

            if (поле.Значение == null ) МенюОткрыть.Visibility=МенюОткрытьСПомощью.Visibility = МенюУдалить.Visibility = Visibility.Collapsed;
            else
            {
                МенюОткрыть.Visibility = МенюОткрытьСПомощью.Visibility = МенюУдалить.Visibility = Visibility.Visible;
            }
               МенюСоздать.Visibility = Visibility.Visible;
               МенюСоздать.ItemsSource = null;
               МенюСоздать.Items.Clear();
            
            if (переменнаяВизуализатор.ВыбранныйТип!=null)
            {   
                if ( переменнаяВизуализатор.Конструкторы.Length != 0 )
                {
                    МенюСоздать.ItemsSource = переменнаяВизуализатор.Конструкторы;
                }
                else
                {
                    МенюСоздать.Visibility = Visibility.Collapsed;
                }
                return;
            }

            if ( переменнаяВизуализатор.ПодходящиеТипы.Count < 10 )
            {
                foreach ( var динОбъект in переменнаяВизуализатор.ПодходящиеТипы )
                {
                        var списокКонструкторов =  динОбъект.Конструкторы;
                       
                        if ( списокКонструкторов.Length != 0 )
                        {
                            var менюЭл=  new MenuItem(){Header = динОбъект.ОписаниеТипа.Имя };
                            МенюСоздать.Items.Add(менюЭл);

                            менюЭл.ItemsSource = списокКонструкторов;

                        }
                }
                return;
            }
        }

    }
}
